library(fixest);library(AER)
rm(list=setdiff(ls(), "twd")) 
options(warn=-1)

data<-readRDS(paste(twd, "data/made_data/vreg_wgeos_race.rds",sep=""))


## In person 20
data$in_person_primary_20<-ifelse(data$voting_method_200303 == "P",1,0)
## Abs early 20
data$abs_early_primary_20<-ifelse(data$voting_method_200303 %in% c("A","E"),1,0)
## In person 18
data$in_person_general_18<-ifelse(data$voting_method_181106 == "P",1,0)
## Abs early 18
data$abs_early_general_18<-ifelse(data$voting_method_181106 %in% c("A","E"),1,0)
## Take First Difference
data$diff_in_person<-data$in_person_primary_20-data$in_person_general_18
data$diff_abs_early<-data$abs_early_primary_20-data$abs_early_general_18
### get the minimum of the distance to a consolidated (including super sites)
data$distance_realized_min<-apply(cbind(data$distance_realized,data$distancegov1,data$distancegov2),1,min,na.rm=T)
## Difference between assigned and realized distances (in logs and levels)
data$ln_dist_change<-ifelse(data$moved==1,log(data$distance_realized_min)-log(data$distance_assigned),0)
data$lev_dist_change<-ifelse(data$moved==1,data$distance_realized_min-data$distance_assigned,0)
### Difference between assigned and realized size # of assigned voters (in logs and levels)
data$ln_diff_N<-log(data$realized_N)-log(data$assigned_N)
data$lev_diff_N<-data$realized_N-data$assigned_N

#### Create differences in turnout for all previous elections and run regression ######

## 18-18b

data$in_person_primary_18<-ifelse(data$voting_method_180802== "P",1,0)
data$abs_early_primary_18<-ifelse(data$voting_method_180802 %in% c("A","E"),1,0)

data$diff_in_person_18_18<-data$in_person_general_18-data$in_person_primary_18
data$diff_abs_early_18_18<-data$abs_early_general_18-data$abs_early_primary_18

ft_18<-feols(diff_in_person_18_18~moved+consolidated+I(dist_damage_min<500)+I(dist_power_min<500)+diff_abs_early_18_18,data=data,cluster~polling_place_text_name)

## 18-16

data$in_person_general_16<-ifelse(data$voting_method_161108== "P",1,0)
data$abs_early_general_16<-ifelse(data$voting_method_161108 %in% c("A","E"),1,0)

data$diff_in_person_18_16<-data$in_person_primary_18-data$in_person_general_16
data$diff_abs_early_18_16<-data$abs_early_primary_18-data$abs_early_general_16

ft_16<-feols(diff_in_person_18_16~moved+consolidated+I(dist_damage_min<500)+I(dist_power_min<500)+diff_abs_early_18_16,data=data,cluster~polling_place_text_name)

## 16-16a

data$in_person_primary_16a<-ifelse(data$voting_method_160804== "P",1,0)
data$abs_early_primary_16a<-ifelse(data$voting_method_160804 %in% c("A","E"),1,0)

data$diff_in_person_16_16a<-data$in_person_general_16-data$in_person_primary_16a
data$diff_abs_early_16_16a<-data$abs_early_general_16-data$abs_early_primary_16a

ft_16a<-feols(diff_in_person_16_16a~moved+consolidated+I(dist_damage_min<500)+I(dist_power_min<500)+diff_abs_early_16_16a,data=data,cluster~polling_place_text_name)

## 16a-16b

data$in_person_primary_16b<-ifelse(data$voting_method_160301== "P",1,0)
data$abs_early_primary_16b<-ifelse(data$voting_method_160301 %in% c("A","E"),1,0)


data$diff_in_person_16_16b<-data$in_person_primary_16a-data$in_person_primary_16b
data$diff_abs_early_16_16b<-data$in_person_primary_16a-data$abs_early_primary_16b

ft_16b<-feols(diff_in_person_16_16b~moved+consolidated+I(dist_damage_min)+I(dist_power_min<500)+diff_abs_early_16_16b,data=data,cluster~polling_place_text_name)

## 16b-14

data$in_person_general_14<-ifelse(data$voting_method_141104== "P",1,0)
data$abs_early_general_14<-ifelse(data$voting_method_141104 %in% c("A","E"),1,0)

data$diff_in_person_16_14<-data$in_person_primary_16b-data$in_person_general_14
data$diff_abs_early_16_14<-data$in_person_primary_16b-data$abs_early_general_14

ft_14<-feols(diff_in_person_16_14~moved+consolidated+I(dist_damage_min<500)+I(dist_power_min<500)+diff_abs_early_16_14,data=data,cluster~polling_place_text_name)

## 14-14a

data$in_person_primary_14<-ifelse(data$voting_method_140807== "P",1,0)
data$abs_early_primary_14<-ifelse(data$voting_method_140807 %in% c("A","E"),1,0)

data$diff_in_person_14_14<-data$in_person_general_14 - data$in_person_primary_14
data$diff_abs_early_14_14<-data$abs_early_general_14 - data$abs_early_primary_14

ft_14a<-feols(diff_in_person_14_14~moved+consolidated+I(dist_damage_min<500)+I(dist_power_min<500)+diff_abs_early_14_14,data=data,cluster~polling_place_text_name)

## 14a-12

data$in_person_general_12<-ifelse(data$voting_method_121106== "P",1,0)
data$abs_early_general_12<-ifelse(data$voting_method_121106 %in% c("A","E"),1,0)

data$diff_in_person_14_12<-data$in_person_primary_14 - data$in_person_general_12
data$diff_abs_early_14_12<-data$abs_early_primary_14 - data$abs_early_general_12

ft_12<-feols(diff_in_person_14_12~moved+consolidated+I(dist_damage_min<500)+I(dist_power_min<500)+diff_abs_early_14_12,data=data,cluster~polling_place_text_name)


### Table 2

log_print(
  esttex(list(ft_18,ft_16,ft_16a,ft_16b,ft_14,ft_14a,ft_12),
       coefstat = "confint",signif.code = NA, 
       keep = c("moved","consolidated","ln_dist_change","ln_diff_N"), 
       fitstat = c("n"))
)

Fa<-linearHypothesis(ft_18,"consolidated=moved",test="F", cluster=~polling_place_text_name)
Fb<-linearHypothesis(ft_16,"consolidated=moved",test="F",cluster=~polling_place_text_name)
Fc<-linearHypothesis(ft_16a,"consolidated=moved",test="F",cluster=~polling_place_text_name)
Fd<-linearHypothesis(ft_16b,"consolidated=moved",test="F",cluster=~polling_place_text_name)
Fe<-linearHypothesis(ft_14,"consolidated=moved",test="F",cluster=~polling_place_text_name)
Ff<-linearHypothesis(ft_14a,"consolidated=moved",test="F",cluster=~polling_place_text_name)
Fg<-linearHypothesis(ft_12,"consolidated=moved",test="F",cluster=~polling_place_text_name)

## F stats & p-value

log_print( data.frame(rbind( c( round(Fa[[3]][2],4), "&",round(Fb[[3]][2],4), "&",round(Fc[[3]][2],4), "&",round(Fd[[3]][2],4), "&",round(Fe[[3]][2],4), "&",round(Ff[[3]][2],4),"&",round(Fg[[3]][2],4), "\\" ) ,
                         c( round(Fa[[4]][2],4), "&",round(Fb[[4]][2],4), "&",round(Fc[[4]][2],4), "&",round(Fd[[4]][2],4), "&",round(Fe[[4]][2],4), "&",round(Ff[[4]][2],4), "&",round(Fg[[4]][2],4),"\\") 
)),row.names=F)

